package io.gitee.geminidev.bot.domain;

import cn.hutool.core.io.FileUtil;
import io.gitee.geminidev.bot.Bot;

import java.io.File;

/**
 * @Author widthwu
 * @Date 2023/4/2 1:51
 * @description: 消息对象
 */
public class Message extends BaseMessage {

    /**
     * 消息id
     */
    private String id;

    /**
     * 子频道id
     */
    private String channelId;

    /**
     * 频道id
     */
    private String guildId;

    /**
     * 消息内容
     */
    private String content;

    /**
     * 消息创建时间，ISO8601 timestamp格式
     */
    private String timestamp;

    /**
     * 消息编辑时间，ISO8601 timestamp格式
     */
    private String editedTimestamp;

    /**
     * 是否是@全员消息
     */
    private boolean mentionEveryone;

    /**
     * 消息创建者，User对象
     */
    private User author;

    /**
     * 附件，MessageAttachment对象数组
     */
    private MessageAttachment[] attachments;

    /**
     * 嵌入内容，MessageEmbed对象数组
     */
    private MessageEmbed[] embeds;

    /**
     * 消息中@的人，User对象数组
     */
    private User[] mentions;

    /**
     * 消息创建者的member信息，Member对象
     */
    private Member member;

    /**
     * ark消息，MessageArk对象
     */
    private MessageArk ark;

    /**
     * 用于消息间的排序，seq 在同一子频道中按从先到后的顺序递增，不同的子频道之间消息无法排序。(目前只在消息事件中有值，2022年8月1日 后续废弃)
     */
    private int seq;

    /**
     * 子频道消息seq，用于消息间的排序，seq 在同一子频道中按从先到后的顺序递增，不同的子频道之间消息无法排序
     */
    private String seqInChannel;

    /**
     * 引用消息，MessageReference对象
     */
    private MessageReference messageReference;

    /**
     * 用于私信场景下识别真实的来源频道id
     */
    private String srcGuildId;

    /**
     * 获取消息id
     * @return 消息id
     */
    public String getId() {
        return id;
    }

    /**
     * 设置消息id
     * @param id 消息id
     */
    public void setId(String id) {
        this.id = id;
    }

    public String getChannelId() {
        return channelId;
    }

    public void setChannelId(String channelId) {
        this.channelId = channelId;
    }

    /**
     * 获取消息内容
     * @return 消息内容
     */
    public String getContent() {
        return content;
    }

    /**
     * 设置消息内容
     * @param content 消息内容
     */
    public void setContent(String content) {
        this.content = content;
    }

    /**
     * 获取消息创建时间
     * @return 消息创建时间
     */
    public String getTimestamp() {
        return timestamp;
    }

    /**
     * 设置消息创建时间
     * @param timestamp 消息创建时间
     */
    public void setTimestamp(String timestamp) {
        this.timestamp = timestamp;
    }

    /**
     * 获取消息创建者
     * @return 消息创建者
     */
    public User getAuthor() {
        return author;
    }

    /**
     * 设置消息创建者
     * @param author 消息创建者
     */
    public void setAuthor(User author) {
        this.author = author;
    }

    /**
     * 获取附件
     * @return 附件
     */
    public MessageAttachment[] getAttachments() {
        return attachments;
    }

    /**
     * 设置附件
     * @param attachments 附件
     */
    public void setAttachments(MessageAttachment[] attachments) {
        this.attachments = attachments;
    }

    /**
     * 获取嵌入内容
     * @return 嵌入内容
     */
    public MessageEmbed[] getEmbeds() {
        return embeds;
    }

    /**
     * 设置嵌入内容
     * @param embeds 嵌入内容
     */
    public void setEmbeds(MessageEmbed[] embeds) {
        this.embeds = embeds;
    }

    /**
     * 获取消息中@的人
     * @return 消息中@的人
     */
    public User[] getMentions() {
        return mentions;
    }

    /**
     * 设置消息中@的人
     * @param mentions 消息中@的人
     */
    public void setMentions(User[] mentions) {
        this.mentions = mentions;
    }

    /**
     * 获取消息创建者的member信息
     * @return 消息创建者的member信息
     */
    public Member getMember() {
        return member;
    }

    /**
     * 设置消息创建者的member信息
     * @param member 消息创建者的member信息
     */
    public void setMember(Member member) {
        this.member = member;
    }

    /**
     * 获取ark消息
     * @return ark消息
     */
    public MessageArk getArk() {
        return ark;
    }

    /**
     * 设置ark消息
     * @param ark ark消息
     */
    public void setArk(MessageArk ark) {
        this.ark = ark;
    }

    /**
     * 获取seq
     * @return seq
     */
    public int getSeq() {
        return seq;
    }

    /**
     * 设置seq
     * @param seq seq
     */
    public void setSeq(int seq) {
        this.seq = seq;
    }

    public String getGuildId() {
        return guildId;
    }

    public void setGuildId(String guildId) {
        this.guildId = guildId;
    }

    public String getEditedTimestamp() {
        return editedTimestamp;
    }

    public void setEditedTimestamp(String editedTimestamp) {
        this.editedTimestamp = editedTimestamp;
    }

    public boolean isMentionEveryone() {
        return mentionEveryone;
    }

    public void setMentionEveryone(boolean mentionEveryone) {
        this.mentionEveryone = mentionEveryone;
    }

    public String getSeqInChannel() {
        return seqInChannel;
    }

    public void setSeqInChannel(String seqInChannel) {
        this.seqInChannel = seqInChannel;
    }

    public MessageReference getMessageReference() {
        return messageReference;
    }

    public void setMessageReference(MessageReference messageReference) {
        this.messageReference = messageReference;
    }

    public String getSrcGuildId() {
        return srcGuildId;
    }

    public void setSrcGuildId(String srcGuildId) {
        this.srcGuildId = srcGuildId;
    }

    public File getTempDirectory(){
        return FileUtil.mkdir(FileUtil.file(Bot.getApplicationiTempDirectory(), this.getId()));
    }
}